001    /*
002     * Created by IntelliJ IDEA.
003     * User: Wei Wang
004     * ACL Lab, School of Computer Science, Montreal, QC
005     * Date: 2002-8-27
006     * Time: 21:51:21
007     */
008    package EVolve.util.predefinedutils;
009    
010    import EVolve.visualization.*;
011    import EVolve.visualization.Dimension;
012    import EVolve.visualization.VizFactory.VisualizationFactory;
013    import EVolve.data.*;
014    import EVolve.*;
015    import EVolve.exceptions.VizInfoCreateException;
016    
017    import java.awt.*;
018    import java.util.StringTokenizer;
019    
020    public class VizInfo {
021        private VisualizationFactory factory;
022        private ElementDefinition subjectDefinition; // definition of the subject
023        private int subjectIndex;
024        private Dimension[] dimension; // dimension of the visualization
025        private PredictorFactory predictor;
026        private int interval;
027        private String windowTitle;
028        private Rectangle windowPos;
029        private long beginCall;
030        private long endCall;
031        private float match;
032        private String options;
033    
034        private ElementDefinition[] elementDefinition; // definition of elements that can be used as subject
035        private DataFilter[][][] dataFilter; // data filters that can be used by the dimensions
036        private VisualizationDefinition definition; // definition of the visualization
037    
038        private boolean validCallRange;
039    
040        public VizInfo() {
041            factory = null;
042            subjectDefinition = null;
043            subjectIndex = 0;
044            elementDefinition = null;
045            dataFilter = null;
046            dimension = null;
047            windowPos = null;
048            beginCall = Integer.MIN_VALUE;
049            endCall = Integer.MIN_VALUE ;
050            match = 100;
051            validCallRange = false;
052    
053            definition = null;
054            interval = -1;
055            predictor = null;
056            windowTitle = null;
057        }
058    
059        public VisualizationFactory getFactory() {
060            return factory;
061        }
062    
063        public void setFactory(VisualizationFactory factory) {
064            try {
065                createFactory(factory.getFactoryName());
066            } catch (Exception e) {
067                System.out.println("Class "+factory.getFactoryName()+" creation failed!");
068            }
069        }
070    
071        public VisualizationFactory createFactory(String name) throws VizInfoCreateException{
072            String fullname = "EVolve/visualization/VizFactory/" + name;
073            ClassLoader loader = ClassLoader.getSystemClassLoader();
074            try {
075                factory = (VisualizationFactory)loader.loadClass(fullname).newInstance();
076    
077                factory.createDefinition();
078                definition = factory.getDefinition();
079                elementDefinition = Scene.getDataManager().getElementDefinition(definition);
080                dataFilter = new DataFilter[elementDefinition.length][definition.getDimensionDefinition().length][];
081                for (int i = 0; i < dataFilter.length; i++) {
082                    for (int j = 0; j < dataFilter[i].length; j++) {
083                        dataFilter[i][j] = Scene.getDataManager().getDataFilter(elementDefinition[i], definition.getDimensionDefinition()[j].getProperty());
084                        for (int k = 0; k < dataFilter[i][j].length; k++) {
085                            assert (((dataFilter[i][j][k].getTargetType() != -1) && (dimension[j] instanceof ReferenceDimension)) || ((dataFilter[i][j][k].getTargetType() == -1) && (dimension[j] instanceof ValueDimension))) : "Incompatible dimension type.";
086                        }
087                    }
088                }
089            } catch (Exception e) {
090                throw new VizInfoCreateException("visualization factory", fullname);
091            }
092    
093            return this.factory;
094        }
095    
096        public ElementDefinition getSubject() {
097            return subjectDefinition;
098        }
099    
100        public void setSubject(ElementDefinition subject) {
101            for (int i=0;i<elementDefinition.length;i++) {
102                if (subject.getName().equals(elementDefinition[i].getName())) {
103                    subjectDefinition = elementDefinition[i];
104                    subjectIndex = i;
105                    break;
106                }
107            }
108        }
109    
110        public ElementDefinition createSubjectDefinition(String name) throws VizInfoCreateException{
111            try {
112                for (int i = 0; i < elementDefinition.length; i++) {
113                    if (elementDefinition[i].getName().equals(name)) {
114                        subjectDefinition = elementDefinition[i];
115                        subjectIndex = i;
116                        break;
117                    }
118                }
119    
120                return this.subjectDefinition;
121            } catch (Exception e) {
122                throw new VizInfoCreateException("subject definition", name);
123            }
124        }
125    
126        public Dimension[] getDimension() {
127            return dimension;
128        }
129    
130        public void setDimension(Dimension[] dimension) {
131            this.dimension = new Dimension[dimension.length];
132    
133            for (int i = 0; i < dimension.length; i++) {
134                this.dimension[i] = dimension[i];
135            }
136        }
137    
138        public Dimension[] createDimension(String[] defs) throws VizInfoCreateException{
139            String name = "";
140            try {
141                dimension = factory.createVisualization().createDimension();
142    
143                for (int i=0;i<dimension.length;i++) {
144                    for (int j=i;j<defs.length;j++) {
145                        if (defs[j].charAt(0) == ';') continue; //a unused entry
146                        name = defs[j];
147                        for (int k=0;k<dataFilter[subjectIndex][i].length;k++) {
148                            if (dataFilter[subjectIndex][i][k].getName().equals(defs[j])) {
149                                dimension[i].setDataFilter(dataFilter[subjectIndex][i][k]);
150                                j =  defs.length+1;
151                                break;
152                            }
153                        }
154                    }
155                }
156    
157                return dimension;
158            } catch (Exception e) {
159                throw new VizInfoCreateException("dimension", name);
160            }
161        }
162    
163        public int getInterval() {
164            return interval;
165        }
166    
167        public void setInterval(int interval) {
168            this.interval = interval;
169        }
170    
171        public Integer createInterval(String interval) throws VizInfoCreateException{
172            try {
173                StringTokenizer token;
174                float values[] = new float[3];
175                int counter = 0;
176    
177                int pos = interval.indexOf(';');
178                if (pos == -1)
179                    this.interval = Integer.parseInt(interval);
180                else { // exist begin/end/match
181                    this.interval = Integer.parseInt(interval.substring(0,pos));
182                    token = new StringTokenizer(interval.substring(pos+1)+",",",");
183                    while (token.hasMoreTokens()) {
184                        values[counter++] = Float.parseFloat(token.nextToken());
185                    }
186                    beginCall = (int)values[0];
187                    endCall = (int)values[1];
188                    if (counter>2) match = values[2];
189                }
190    
191                return new Integer(this.interval);
192            } catch (Exception e) {
193                throw new VizInfoCreateException("interval", interval);
194            }
195        }
196    
197        public PredictorFactory getPredictor() {
198            return predictor;
199        }
200    
201        public void setPredictor(PredictorFactory predictor) {
202            this.predictor = predictor;
203        }
204    
205        public PredictorFactory createPredictor(String name) throws VizInfoCreateException{
206            try {
207                if (name.charAt(0) == ';') {
208                    this.predictor = null;
209                } else {
210                    this.predictor = new DefaultPredictorFactory();
211                }
212    
213                return this.predictor;
214            } catch (Exception e) {
215                throw new VizInfoCreateException("predictor", name);
216            }
217        }
218    
219        public void setWindowPosition(Rectangle position) {
220            this.windowPos = position;
221        }
222    
223        public Rectangle getWindowPosition() {
224            return this.windowPos;
225        }
226    
227        public void createWindowPosition(String x,String y,String w,String h) throws VizInfoCreateException{
228            try {
229                this.windowPos = new Rectangle(new Integer(x).intValue(),new Integer(y).intValue(),
230                                               new Integer(w).intValue(),new Integer(h).intValue());
231            } catch (Exception e) {
232                throw new VizInfoCreateException("window position", x+","+y+","+w+","+h);
233            }
234        }
235    
236        public void reset() {
237            factory = null;
238            subjectDefinition = null;
239            subjectIndex = 0;
240            dimension = null;
241            definition = null;
242            interval = -1;
243            predictor = null;
244            windowPos = null;
245        }
246    
247        public VisualizationDefinition getDefinition() {
248            return definition;
249        }
250    
251        public void setDefinition(VisualizationDefinition def) {
252            definition = def;
253        }
254    
255        public VisualizationDefinition creatDefinition() {
256            return null;
257        }
258    
259        public String getTitle() {
260            return windowTitle;
261        }
262    
263        public void createTitle(String title) throws VizInfoCreateException{
264            try {
265                this.windowTitle = title;
266            }  catch (Exception e) {
267                throw new VizInfoCreateException("Title", title);
268            }
269        }
270    
271        public long getBeginCall() {
272            return beginCall;
273        }
274    
275        public long getEndCall() {
276            return endCall;
277        }
278    
279        public float getMatch() {
280            return match;
281        }
282    
283        public boolean isValidCallRange() {
284            return validCallRange;
285        }
286    
287        //options are in string format
288        public String getOptions() {
289            return options;
290        }
291    
292        public void setOptions(String options) {
293            this.options = options;
294        }
295    
296        public void createOptions(String options) {
297            this.options = options;
298        }
299    }